package cliente.gerenciadorcliente.iu;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.rmi.RemoteException;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import cliente.gerenciadorcliente.rn.RNSalaPrincipal;
import cliente.so.SOGeradorPopup;
import cliente.so.SOPopup;

import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
import comum.so.exception.SalaComNomeJaExistenteException;

public class IUPainelCriarSalaJogo extends JPanel {

	private static final long serialVersionUID = -1780907970587648769L;
	private JTextField textFieldNomeJogo;
	private JPasswordField passwordFieldSenha;
	private JButton btnCriar;

	private RNSalaPrincipal salaPrincipal;

	/**
	 * Create the panel.
	 */
	public IUPainelCriarSalaJogo(RNSalaPrincipal salaPrincipal) {
		this.setSalaPrincipal(salaPrincipal);
		
		setLayout(new FormLayout(new ColumnSpec[] {
				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
				ColumnSpec.decode("81px"),
				FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
				ColumnSpec.decode("116px"), ColumnSpec.decode("136px"),
				ColumnSpec.decode("99px"), }, new RowSpec[] {
				FormFactory.RELATED_GAP_ROWSPEC, RowSpec.decode("22px"),
				FormFactory.NARROW_LINE_GAP_ROWSPEC, RowSpec.decode("25px"),
				FormFactory.NARROW_LINE_GAP_ROWSPEC, RowSpec.decode("25px"), }));
		

		JLabel lblNomeJogo = new JLabel("Nome do Jogo");
		add(lblNomeJogo, "2, 2, left, center");

		setTextFieldNomeJogo(new JTextField());
		add(getTextFieldNomeJogo(), "4, 2, left, top");
		getTextFieldNomeJogo().setColumns(10);
		getTextFieldNomeJogo().getDocument().addDocumentListener(new DocumentListener() {
			
			@Override
			public void removeUpdate(DocumentEvent e) {
				habilitarBtnCriar();
			}
			
			@Override
			public void insertUpdate(DocumentEvent e) {
				habilitarBtnCriar();
			}
			
			@Override
			public void changedUpdate(DocumentEvent e) {
				habilitarBtnCriar();
			}
		});

		final JCheckBox chkSenha = new JCheckBox("Senha");
		add(chkSenha, "2, 4, left, top");
		chkSenha.addChangeListener(new ChangeListener() {

			@Override
			public void stateChanged(ChangeEvent event) {
				getPasswordFieldSenha().setText(null);
				getPasswordFieldSenha().setEnabled(chkSenha.isSelected());
			}
		});

		setPasswordFieldSenha(new JPasswordField());
		add(getPasswordFieldSenha(), "4, 4, left, top");
		getPasswordFieldSenha().setColumns(10);
		getPasswordFieldSenha().setEnabled(false);

		btnCriar = new JButton("Criar");
		add(btnCriar, "4, 6, right, top");

		btnCriar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent evt) {
				String senha = chkSenha.isSelected() ? new String(
						getPasswordFieldSenha().getPassword()) : null;
				criarSalaJogo(getTextFieldNomeJogo().getText(), senha);
			}
		});
		btnCriar.setEnabled(false);
	}

	public void criarSalaJogo(String nomeJogo, String senha) {
		try {
			getSalaPrincipal().criarSalaJogo(nomeJogo, senha);
		} catch (RemoteException e) {
			SOGeradorPopup.getPopup(SOPopup.CONEXAO_PERDIDA);
		} catch (SalaComNomeJaExistenteException e) {
			SOGeradorPopup.getPopup(SOPopup.NOME_JA_EXISTE);
		}
	}
	
	public void habilitarBtnCriar () {
		if (getTextFieldNomeJogo().getText() == null || getTextFieldNomeJogo().getText().equals(""))
			btnCriar.setEnabled(false);
		else
			btnCriar.setEnabled(true);
	}

	protected JTextField getTextFieldNomeJogo() {
		return textFieldNomeJogo;
	}

	protected void setTextFieldNomeJogo(JTextField textFieldNomeJogo) {
		this.textFieldNomeJogo = textFieldNomeJogo;
	}

	protected JPasswordField getPasswordFieldSenha() {
		return passwordFieldSenha;
	}

	protected void setPasswordFieldSenha(JPasswordField passwordFieldSenha) {
		this.passwordFieldSenha = passwordFieldSenha;
	}

	protected RNSalaPrincipal getSalaPrincipal() {
		return salaPrincipal;
	}

	protected void setSalaPrincipal(RNSalaPrincipal salaPrincipal) {
		this.salaPrincipal = salaPrincipal;
	}
}
